/**
 * Baco OPC - Baco Sistemas corp.
 */

package bacoopc.algoritmos_de_controle;

import bacoopc.AlgoritmoDeControle;

/**
 *
 * @author Baco Sistemas
 */
public class PD extends AlgoritmoDeControle {

    private double erroAtual = 0.0;

    public PD() {
        this.getTodosParâmetros().put(REFERÊNCIA, 0.0);
        this.getTodosParâmetros().put(KP,        0.0);
        this.getTodosParâmetros().put(KD,        0.0);
    }

    @Override
    public double f(double valor) {
        double ref = this.getParâmetro(REFERÊNCIA);
        double Kp  = this.getParâmetro(KP);
        double Kd  = this.getParâmetro(KD);

        double e = ref - valor;

        double P = Kp * e;
        double D = Kd * (erroAtual - e) / getT();
        
        erroAtual = e;

        return P + D;
    }

    private static final String REFERÊNCIA   = "Valor de referência";
    private static final String KP          = "Kp";
    private static final String KD          = "Kd";

    @Override
    public String getName() {
        return "PD";
    }

}
